package com.munichosica.myapp.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.munichosica.myapp.dto.Almacen;
import com.munichosica.myapp.dto.Categoria;
import com.munichosica.myapp.dto.Producto;
import com.munichosica.myapp.dto.Proveedor;
import com.munichosica.myapp.dto.Rol;
import com.munichosica.myapp.dto.Tienda;
import com.munichosica.myapp.dto.Ubigeo;
import com.munichosica.myapp.dto.Usuario;
import com.munichosica.myapp.exceptions.AlmacenDaoException;
import com.munichosica.myapp.exceptions.CategoriaDaoException;
import com.munichosica.myapp.exceptions.ProductoDaoException;
import com.munichosica.myapp.exceptions.ProveedorDaoException;
import com.munichosica.myapp.exceptions.RolException;
import com.munichosica.myapp.exceptions.TiendaDaoException;
import com.munichosica.myapp.exceptions.UbigeoDaoException;
import com.munichosica.myapp.exceptions.UsuarioException;
import com.munichosica.myapp.factory.AlmacenDaoFactory;
import com.munichosica.myapp.factory.CategoriaDaoFactory;
import com.munichosica.myapp.factory.ProductoDaoFactory;
import com.munichosica.myapp.factory.ProveedorDaoFactory;
import com.munichosica.myapp.factory.RolDaoFactory;
import com.munichosica.myapp.factory.TiendaDaoFactory;
import com.munichosica.myapp.factory.UbigeoDaoFactory;
import com.munichosica.myapp.factory.UsuarioDaoFactory;
import com.munichosica.myapp.util.UserSecurity;

@Controller
@RequestMapping("/")
public class PageController {
	
	Logger logger=Logger.getLogger(PageController.class);
	
	@RequestMapping(value="Inicio.htm",method=RequestMethod.GET)
	public String inicio(HttpServletRequest request,Model model){
		logger.info("Ingreso a Inicio.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		model.addAttribute("usuario",usuario);
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesBienvenido";
	}
	
	@RequestMapping(value="Maestros.htm",method=RequestMethod.GET)
	public String empresas(HttpServletRequest request,Model model){
		logger.info("Ingreso a Maestros.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
	
		model.addAttribute("usuario",usuario);
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesMaestros";
	}
	
	@RequestMapping(value="Usuarios.htm",method=RequestMethod.GET)
	public String usuarios(HttpServletRequest request,Model model){
		logger.info("Ingreso a Usuarios.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
	
		List<Rol> roles=null;
		List<Ubigeo> departamentos=null;
		
		try {
			roles=RolDaoFactory.create().listarTodo();
			departamentos=UbigeoDaoFactory.create().listarDepartamento();
		} catch (RolException | UbigeoDaoException e) {
			logger.error(e.getMessage(),e);
		}

		model.addAttribute("rol", roles);
		model.addAttribute("departamento", departamentos);
		model.addAttribute("usuario",usuario);
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesUsuarios";
	}
	
	@RequestMapping(value="Almacenes.htm", method=RequestMethod.GET)
	public String almacenes(HttpServletRequest request, Model model){
		logger.info("Ingreso a Almacenes.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesAlmacenes";
	}

	@RequestMapping(value="Tiendas.htm", method=RequestMethod.GET)
	public String tiendas(HttpServletRequest request, Model model){
		logger.info("Ingreso a Tiendas.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesTiendas";
	}
	
	@RequestMapping(value="AlmacenTienda.htm", method=RequestMethod.GET)
	public String almacenTienda(HttpServletRequest request, Model model){
		logger.info("Ingreso a Almacen - Tienda.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		List<Almacen> almacenes=null;
		try {
			almacenes=AlmacenDaoFactory.create().listarPorCriterio("ALM.ALMCODIGO_I", "", "A");
		} catch (AlmacenDaoException e) {
			logger.error(e.getMessage(), e);
		}

		model.addAttribute("almacenes",almacenes);
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesAlmacenTienda";
	}

	@RequestMapping(value="Productos.htm", method=RequestMethod.GET)
	public String productos(HttpServletRequest request, Model model){
		logger.info("Ingreso a Productos.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		
		List<Categoria> categorias=null;
		try {
			categorias=CategoriaDaoFactory.create().listarTodos();
			System.out.println("CATEGORIAS"+categorias.size());
		} catch (CategoriaDaoException e) {
			logger.error(e.getMessage(),e);
		}

		model.addAttribute("categorias", categorias);
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesProductos";
	}

	@RequestMapping(value="Categorias.htm", method=RequestMethod.GET)
	public String Categoria(HttpServletRequest request, Model model){
		logger.info("Ingreso a Categoria.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesCategoria";
	}

	@RequestMapping(value="Entrada.htm", method=RequestMethod.GET)
	public String Entrada(HttpServletRequest request, Model model){
		logger.info("Ingreso a Entrada.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		Usuario almacenero=null;
		List<Tienda> tiendas=null;
		List<Producto> productos=null;
		List<Proveedor> proveedores=null;
		try {
			almacenero=UsuarioDaoFactory.create().obtener(usuario.getUsuusuarioV());
			tiendas=TiendaDaoFactory.create().listarPorAlmacen(almacenero.getTipoCodigo());
			productos=ProductoDaoFactory.create().listarTodos();
			proveedores=ProveedorDaoFactory.create().listarTodos();
		} catch (TiendaDaoException | UsuarioException | ProductoDaoException | ProveedorDaoException e) {
			logger.error(e.getMessage(), e);
		}
		model.addAttribute("tiendas",tiendas);
		model.addAttribute("productos",productos);
		model.addAttribute("proveedores",proveedores);
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesEntrada";
	}

	@RequestMapping(value="Salida.htm", method=RequestMethod.GET)
	public String Salida(HttpServletRequest request, Model model){
		logger.info("Ingreso a Salida.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesSalida";
	}
	

	@RequestMapping(value="Proveedores.htm", method=RequestMethod.GET)
	public String Proveedores(HttpServletRequest request, Model model){
		logger.info("Ingreso a Proveedores.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesProveedor";
	}
	/*
	 * @RequestMapping(value="Almacenes.htm", method=RequestMethod.GET)
	public String almacenes(HttpServletRequest request, Model model){
		logger.info("Ingreso a Almacenes.htm");
		HttpSession session=request.getSession(true);
		Usuario usuario=(Usuario) session.getAttribute("USUARIO");
		if(usuario==null){
			usuario=new UserSecurity().getUsuarioByUser(request);
			session.setAttribute("USUARIO", usuario);
		}
		
		model.addAttribute("paginas",usuario.getRol().getPaginas());
		return "tilesAlmacenes";
	}
	 * */
}
